#include "delay.h"
#include "main.h"


volatile uint32_t gMS_TimeCNT;


/**
 * @brief	延时微秒(us)函数
 *
 * @param   nus		需要延时多少微秒(must < 1000)
 *
 * @return  void
 */
void delay_us(uint32_t nus)
{
    uint32_t start, now, delta, reload;
	uint32_t ticks = 0;
	
	start = SysTick->VAL;					// 刚进入时的计数器值
    reload = SysTick->LOAD;					// 系统时钟重装载值
    ticks = SystemCoreClock / 1000000UL;	// 72M/1M = 72
    
	do{
		now = SysTick->VAL;
		delta = start > now ? start - now : reload + start - now;
	} while(delta < ticks * nus);	// 时间超过/等于要延迟的时间,则退出.
}


/**
 * @brief	延时毫秒(ms)函数
 *
 * @param   nms		需要延时多少毫秒
 *
 * @return  void
 */
void delay_ms(uint16_t nms)
{
    uint16_t i;

    for(i = 0; i < 2*nms; i++) 
		delay_us(500);
}

